home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 September / Chip_2000-09_cd1.bin / sharewar / Slunec / app / 16 / COMM.SWG / 0010_Hudson Format (GERMAN!).pas < prev    next >
Pascal/Delphi Source File  |  1997-05-11  |  13KB  |  392 lines

  1.  
  2.  
  3.  
  4.  
  5.                  The little programers guide to the hudsonbase
  6.                  ---------------------=*=--------------------- 
  7.                                        
  8.  
  9.  
  10.  
  11.  
  12.                           Was Sie schon immer über die
  13.  
  14.  
  15.                        Strukturen der Hudson-Messagebase
  16.                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  17.  
  18.                                  wissen wollten - 
  19.                       bisher aber nicht zu fragen wagten ...
  20.  
  21.  
  22.  
  23.  
  24. -------------------------------------------------------------------------------
  25.  
  26.  
  27. DIE DATEIEN
  28. ~~~~~~~~~~~
  29. Die Messagebase besteht aus fünf Dateien, in denen alle Mails aller Areas
  30. gespeichert werden (ausser den Mailer *.MSG's natürlich):
  31.  
  32. MSGINFO .BBS     MSG-Anzahl in den Boards (höchste,niedrigste,gesamt)
  33. MSGIDX  .BBS     Message Nr x gehört zu Board y
  34. MSGHDR  .BBS     Anschriftenteil der MSG's (BY:XX, TO:XX, RE:XX, Flags ..)
  35. MSGTXT  .BBS     Der eigentliche Text (ohne BY:, TO:, etc.)
  36. MSGTOIDX.BBS     Indexdatei für TO:xxx, enthält Namen bzw. *Received*
  37.  
  38.  
  39. Die Messagebase arbeitet nicht mit den Namen der Echoboards, sondern 
  40. organisiert sich ausschließlich mit den Board-Nummern (1 - 200). Boardnamen
  41. werden nur vom Tosser/Scanner verwendet - der damit die Zuordnung zu der vom
  42. SysOp definierten Boardnummer aufbaut (zB: REQUEST.GER = Board# 100). Die
  43. fünf Dateien enthalten also KEINE Boardnamen (ausser bei Fehlern :-).
  44.  
  45.  
  46.  
  47.  
  48. VARIABLENAUFBAU
  49. ~~~~~~~~~~~~~~~
  50. Folgende Variablenarten werden verwendet (Pascal-Strukturen):
  51.  
  52.      1-Byte-Zeiger   = Byte     =  ASCII 0 bis ASCII 255
  53.  
  54.      2-Byte-Zeiger   = Integer  =  LSB,MSB
  55.  
  56.      String          = PASCSTRG =  [LängenByte]TEXT
  57.  
  58.  
  59.  
  60.  
  61. DIE STRUKTUREN
  62. ~~~~~~~~~~~~~~
  63.  
  64.  
  65.      MSGINFO.BBS 
  66.      ===========
  67.  
  68.      Randomdatei mit Satzlänge 2
  69.      Satzanzahl immer 203
  70.  
  71.      Bedeutung:  Enthält die Gesamtzahl der Messages und die Zahl in den
  72.                  einzelnen Boards. Damit kann zB. ein MSG-Editor anzeigen
  73.                  wieviele Nachrichten in einem Board liegen.
  74.  
  75.      Satzaufbau:
  76.  
  77.                  InfoRecord = Record
  78.                                 LowMsg:      Integer;
  79.                                 HighMsg:     Integer;
  80.                                 TotalActive: Integer;
  81.  
  82.                                 ActiveMsgs:  Array[1..200] of Integer;
  83.                              End;
  84.  
  85.  
  86.      Felder:    Also, alles 2-Byte-Zeiger:
  87.  
  88.                 (Low)(High)(Total)(Area1)(Area2)(Area3)(Area...200)
  89.                   2    2      2      2      2      2      ...       = 406 Byte
  90.  
  91.  
  92.                 Alle Zeigerwerte liegen zwischen 1 und 32768.
  93.                    Low      = Niedrigste Nr aller aktiven MSG's
  94.                    High     = Höchste Nr aller aktiven MSG's
  95.                    Total    = Anzahl aller aktiven MSG's
  96.                    AreaX    = Anzahl der aktiven MSG's in Area 1 - 200
  97.  
  98.                               (aktiv=ungelöscht=ohne Löschvermerk)
  99.  
  100.  
  101.      Hinweis: Manche Tosser verdoppeln diesen Dateiinhalt indem sie aus
  102.      Sicherheitsgründen die Gesamtstruktur zweimal hintereinander anlegen:
  103.  
  104.      (Low)(High)(Total)(Area1)(Area2)(Area..200)(Low)(High)(Total)(Area1)...
  105.                                                  ^^^^^^^^^^^^^^^^^^^^^^^^...
  106.      Dann ist die MSGINFO.BBS = 812 Byte groß. Gültig sind aber nur die
  107.      ersten 406 Byte.
  108.  
  109.  
  110.  
  111.  
  112.      MSGIDX.BBS 
  113.      ==========
  114.  
  115.      Randomdatei mit Satzlänge 3
  116.      Je Message existiert ein Satz.
  117.  
  118.      Bedeutung:  Hält für jede Message(-Nr) fest zu welchem Board sie
  119.                  gehört. Damit findet ein Editor beim Weiterschalten die
  120.                  jeweils nächste oder vorige Message in einem Board.
  121.  
  122.      Satzaufbau:
  123.  
  124.                  IdxRecord = Record
  125.                                MsgNum:       Integer;
  126.                                Board:        Byte;
  127.                              End;
  128.  
  129.  
  130.      Felder:     Also 2-Byte-Zeiger plus 1-Byte-Zeiger:
  131.  
  132.                  (MSG-Nr) (Board)
  133.                     2        1         = 3
  134.  
  135.                  MSG-Nr zwischen 1 und 32768 
  136.                  Board  zwischen 1 und 200
  137.  
  138.  
  139.  
  140.  
  141.      MSGHDR.BBS
  142.      ==========
  143.  
  144.      Randomdatei mit Satzlänge 187
  145.      Je Message existiert ein Satz.
  146.  
  147.      Bedeutung:  Enthält den gesamten Message-Header, incl. aller Angaben
  148.                  zu Sender, Empfänger, Nodeadressen, etc.
  149.                  Ebenso einen Zeiger auf den eigentlichen Messagetext.
  150.  
  151.      Satzaufbau:
  152.                                                                      Bytes
  153.           HdrRecord = Record
  154.                         MsgNum,             Integer                    2
  155.                         ReplyTo,            Integer                    2
  156.                         SeeAlsoNum,         Integer                    2
  157.                         TimesRead:          Integer  { Not used }      2
  158.                         StartRec:           Word                       4
  159.                         NumRecs,            Integer                    2
  160.                         DestNet,            Integer                    2
  161.                         DestNode,           Integer                    2
  162.                         OrigNet,            Integer                    2
  163.                         OrigNode:           Integer                    2
  164.                         DestZone,           Byte                       1
  165.                         OrigZone:           Byte                       1
  166.                         Cost:               Integer                    2 
  167.                         MsgAttr,            Byte                       1
  168.                         NetAttr,            Byte                       1
  169.                         Board:              Byte                       1
  170.                         PostTime:           String[5]                  6
  171.                         PostDate:           String[8]                  9
  172.                         WhoTo,              String[35]                36
  173.                         WhoFrom:            String[35]                36
  174.                         Subj:               String[72]                72
  175.                       End;
  176.  
  177.  
  178.  
  179.      Felder:     Alle Strings sind in der Form "[Längenbyte]Text" aufgebaut.
  180.  
  181.                  MsgNum       - Fortlaufende Nummer 1 - 32768
  182.  
  183.                  ReplyTo      - Rück-Verweis (Verkettung zurück) auf
  184.                                 Msg Nr xx oder 0
  185.  
  186.                  SeeAlsoNum   - Vor-Verweis (Verkettung vorwärts) auf
  187.                                 Msg Nr xx oder 0
  188.  
  189.                  StartRec     - ist als WORD aufgebaut und enthält die
  190.                                 Blocknummer bei der der Messagetext in
  191.                                 der MSGTXT.BBS beginnt.
  192.  
  193.                  NumRecs      - Anzahl der Blöcke die die Message in der
  194.                                 MSGTXT.BBS belegt.
  195.  
  196.                  DestNet/
  197.                    Node/Zone  - Bei Netmails Ziel-Zone, -Node und -Netz
  198.  
  199.                  OrgNet/
  200.                    Node/Zone  - Bei Netmails Origin-Zone, -Node und Netz
  201.  
  202.                  Cost         - Kostenkennung der Mail
  203.  
  204.                  MsgAttr      - Msg Attributes:
  205.                                    Bit 0: Deleted
  206.                                    Bit 1: Unsent net mail message
  207.                                    Bit 2: Net mail message
  208.                                    Bit 3: Private message
  209.                                    Bit 4: Received
  210.                                    Bit 5: Unsent echomail message
  211.                                    Bit 6: Local message
  212.                                    Bit 7: Not used
  213.  
  214.                  NetAttr      - Net Attributes:
  215.                                    Bit 0: Kill after sent
  216.                                    Bit 1: Sent OK
  217.                                    Bit 2: File attach
  218.                                    Bit 3: Crash mail
  219.                                    Bit 4: Request Receipt
  220.                                    Bit 5: Audit Request
  221.                                    Bit 6: Is a Return Receipt
  222.                                    Bit 7: Not used
  223.  
  224.                                 Dieses Byte wird nur bei Netmails verwendet.
  225.  
  226.  
  227.                  Board        - Boardnummer, Board zu dem die Msg gehört
  228.  
  229.                  PostTime     - Uhrzeit der Msg, in der Stringform:
  230.                                    12:45 Uhr =>     (ASCII_5)12:45
  231.  
  232.                  PostDate     - Datum der Msg, als Monat-Tag-Jahr:
  233.                                    24.06.92  =>     (ASCII_8)06-24-92
  234.  
  235.                  WhoTo        - Empfängername in Stringform
  236.  
  237.                  WhoFrom      - Ansendername in Stringform
  238.  
  239.                  Subj         - Betreff in Stringform
  240.  
  241.  
  242.  
  243.  
  244.  
  245.      MSGTXT.BBS
  246.      ==========
  247.  
  248.      Bedeutung:  Enthält den Messagetext - und NUR den Text.
  249.  
  250.      Satzaufbau: Messagetext in 256-Byte-Blöcken:
  251.  
  252.                  Byte 1          =  Blocklänge (1 bis 255)
  253.                  Byte 2 - 256    =  Text
  254.  
  255.  
  256.  
  257.                  Ein Text der zB. 300 Byte lang ist, wird dann so gespeichert:
  258.  
  259.                  Block 1         (ASCII_255)  +  die ersten 255 Byte Text
  260.                  Block 2         (ASCII_45)   +  die restlichen 45 Byte Text
  261.                                            Der Rest des 2.Blocks bleibt leer.
  262.                  Block 3         (LängenByte ... der nächsten Nachricht ...
  263.  
  264.  
  265.                  Für jede Message existieren also unterschiedlich viele
  266.                  Blöcke.
  267.  
  268.      Hinweis: Das gelegentlich _IM_ Text vorkommende ASCII 141 »ì« dient
  269.      als Soft-Return und hat sonst keine Bedeutung.
  270.  
  271.  
  272.  
  273.  
  274.      MSGTOIDX.BBS
  275.      ============
  276.  
  277.      Randomdatei mit Satzlänge 36 Byte.
  278.      Für jede Message existiert ein Satz.
  279.  
  280.      Bedeutung:  Lesemerker für die User. Ein Editor oder BBS ermittelt
  281.                  hiermit, welche ungelesenen Mails an den jeweiligen User
  282.                  noch vorhanden sind. 
  283.  
  284.      Satzaufbau:
  285.  
  286.                  ToIndex = Record
  287.                              WhoTo:      String[35]
  288.                            End;
  289.  
  290.  
  291.  
  292.      Felder:     Also:    Byte 1        =  Textlänge
  293.                           Byte 2 - 36   =  Name des Message-Empfängers
  294.  
  295.  
  296.                  Wurde die Mail vom User gelesen, dann steht anschließend in
  297.                  Byte 2-36 nicht mehr der Username, sondern "* Received *"
  298.  
  299.  
  300.                  Beispiel: Empfänger heißt "Hans Huber" = 10 Zeichen
  301.                                (ASCII_10)Hans Huber
  302.                            nach dem Lesen:
  303.                                (ASCII_12)* Received *
  304.  
  305.  
  306.  
  307.  
  308. ZUSAMMENSPIEL
  309. ~~~~~~~~~~~~~
  310.  
  311. Die fünf Dateien hängen nach folgendem Schema von einander ab:
  312.  
  313.  
  314.                       ┌---> Empfängername als Kopie in MSGTOIDX.BBS 
  315.                       | 
  316.               ┌---> Header  in MSGHDR.BBS
  317.               |
  318.    Message >--┼---> Text    in MSGTXT.BBS
  319.               |
  320.               └---> BoardNr in MSGIDX.BBS
  321.                       |
  322.                       └---> Gesamtzahl und Anzahl/Board in MSGINFO.BBS 
  323.  
  324.  
  325.  
  326. Die Ordnungsfolge der Datensätze folgender Dateien entspricht einander:
  327.  
  328.     1. Satz in MSGHDR.BBS -
  329.              - gehört zu 1. Satz in MSGIDX.BBS -
  330.                      - gehört zu 1. Satz in MSGTOIDX.BBS
  331.  
  332.  
  333.     (MSGTXT.BBS und MSGINFO.BBS sind logischerweise nicht so zuzuordnen.)
  334.  
  335.  
  336.  
  337.  
  338.  
  339. WIE LESE ICH NUN EINE MESSAGE AUS DER BASE?
  340. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  341.  
  342. Nehmen wir zB. Messagenummer 452
  343.  
  344.       a)    Satz 452 aus MSGHDR.BBS lesen,
  345.             BY:, TO:, RE:, etc extrahieren,
  346.  
  347.       b)    Feld -StartRec- auslesen,
  348.             Feld -NumRecs- auslesen
  349.  
  350.       c)    In der MSGTXT ab dem Block (StartRec) lesen,
  351.             undzwar (NumRecs) Blöcke lang.
  352.  
  353.  
  354. Und schon haben wir die Mail!
  355.  
  356.  
  357.  
  358.  
  359.   MSGHDR.BBS                                MSGTXT.BBS
  360.    ...                                      ... 
  361.    -StartRec-  -NumRecs-                    (ASCII_60)textetxtetxtet.
  362.        ╚═══════════╪═══════(ab hier)═════>┌ (ASCII_255)Texttxtetxtetxtextte
  363.                    └────────(zB. 4)───────┼ (ASCII_255)textetxtetxtetxtetxt
  364.                                           ├ (ASCII_255)textetxtetxtetxtetxt
  365.                                           └ (ASCII_50)textetxtet.
  366.                                             (ASCII_255)Textetxtetxtetxtetxt
  367.                                             ...
  368.  
  369.  
  370.  
  371. Zeilenumbrüche sind entweder als Hardreturn ASCII_13 (CR) oder als
  372. Softreturn ASCII_141 (ì) im Text enthalten:
  373.  
  374.   ( soll ASCII_13 darstellen)
  375.  
  376.   "≡Hallo, das ist eine erste Zeileìund das die zweiteund hier die dritte..."
  377.    ^                               ^                  ^ 
  378.    └─ Längenbyte                   └─ Zeilenumbrüche ─┘
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385. -------------------------------------------------------------------------------
  386. The little programers guide to the hudsonbase.
  387.  
  388. * Origin:  Munich, 15.09.92
  389.  
  390.            -Rainer-
  391.           (2:246/54)
  392.